import { Component, Vue } from 'vue-property-decorator';
import { mixinDialogParent } from "@/mixin/dialog/Parent";
import { isEmpty } from '@/utils/index'
/**
 * 这是一个编辑弹窗父容器mixin类
 * 集成mixinDialogParent
 *
 * @Function onAddClick 点击新增按钮时
 * @Function showInfo 显示详情弹窗
 * @Function showWin 显示弹窗
 * @Function onSubmitSuccess 提交数据成功后逻辑处理
 * @Function onCloseDialog 关闭弹窗逻辑处理
 *
 * @export
 * @class mixinDialogFormParent
 * @extends {Vue}
 */
@Component({
    mixins: [mixinDialogParent]
})
export class mixinDialogFormParent extends Vue {

    /**
     * 点击新增按钮时
     * 此时isEdit为false
     *
     * @memberof mixinDialogFormParent
     */
    onAddClick() {
        this.showWin(false);
    }

    /**
     * 显示详情弹窗
     * 此时isInfo为true
     *
     * @param {*} [data] 主键或数据
     * @param {string} [dialogName='dialogForm'] 弹窗ref名称
     * @param {string} [key='infoData'] 主键名称
     * @memberof mixinDialogFormParent
     */
    showInfo(data?: any, dialogName: string = 'dialogForm', key: string = 'infoData') {
        const me = this as any;
        // 标识弹窗当前isInfo状态
        me.setDialogValue('isInfo', true, dialogName);
        me.showWin(true, data, dialogName, key);
    }

    /**
     * 显示弹窗
     * 如果有editBefore方法会调用
     *
     * @param {boolean} isEdit 是否修改状态，用于弹窗中做一系列逻辑判断
     * @param {*} [data] 主键或数据
     * @param {string} [dialogName='dialogForm'] 弹窗ref名称
     * @param {string} [key='infoData'] 主键名称
     * @memberof mixinDialogFormParent
     */
    showWin(isEdit: boolean, data?: any, dialogName: string = 'dialogForm', key: string = 'infoData') {
        const me = this as any;
        // 标识当前弹窗编辑状态
        me.setDialogValue('isEdit', isEdit, dialogName);
        me.setDialogHidden(false, dialogName);
        if (!isEmpty(data)) {
            me.setDialogValue(key, data, dialogName);
        }
        // 检查是否有editBefore方法，如果有就执行
        me.editBefore && me.editBefore();
    }

    /**
     * 关闭弹窗逻辑处理
     * 如果有beforecloseDialog方法会调用
     *
     * @param {string} [dialogName='dialogForm'] 弹窗ref名称
     * @param {string} [key='infoData'] 主键名称
     * @memberof mixinDialogFormParent
     */
    onCloseDialog(dialogName: string = 'dialogForm', key: string = 'infoData') {
        // console.log('onCloseDialog');
        const me = this as any;
        me.superOnCloseDialog(dialogName);
        // 重置主键，不重置同一条数据下次修改时Watch无法监听改变
        me.setDialogValue(key, -1, dialogName);
        // 重置isInfo状态
        me.setDialogValue('isInfo', false, dialogName);
    }
}
